package pl.prv.polanie.client.service;

import pl.prv.polanie.client.dto.CSAcademicTitleDTO;
import pl.prv.polanie.client.dto.CSBuildingDTO;
import pl.prv.polanie.client.dto.CSCalendarDayDTO;
import pl.prv.polanie.client.dto.CSDeclarationDTO;
import pl.prv.polanie.client.dto.CSGroupDTO;
import pl.prv.polanie.client.dto.CSLecturerDTO;
import pl.prv.polanie.client.dto.CSPreferenceDTO;
import pl.prv.polanie.client.dto.CSPreferenceTypeDTO;
import pl.prv.polanie.client.dto.CSRoomDTO;
import pl.prv.polanie.client.dto.CSRoomTypeDTO;
import pl.prv.polanie.client.dto.CSSemesterDTO;
import pl.prv.polanie.client.dto.CSSemestersYearGroupsDTO;
import pl.prv.polanie.client.dto.CSSubgroupDTO;
import pl.prv.polanie.client.dto.CSSubgroupTypeDTO;
import pl.prv.polanie.client.dto.CSSubjectDTO;
import pl.prv.polanie.client.dto.CSSubjectEventDTO;
import pl.prv.polanie.client.dto.CSSubjectNameDTO;
import pl.prv.polanie.client.dto.CSSubjectTypeDTO;
import pl.prv.polanie.client.dto.CSYearGroupNameDTO;

import com.google.gwt.user.client.rpc.AsyncCallback;

public interface PlannerServiceAsync {
	//PlannerServiceImpl
	
	
	
	
	//zwraca subjectEvents dla grupy
	public void getSubjectEventsByGroupID(Long groupID, AsyncCallback callback);
	public void getCSSubjectEventsByGroupID(Long groupID, AsyncCallback callback);

	//zwraca subjectEvents dla sali
	public void getCSSubjectEventsByRoomID(Long roomID, Long semesterID, AsyncCallback callback);
	public void getCSSubjectEventsByLecturerID(Long lecturerID, Long semesterID, AsyncCallback callback);
	
	public void getCSSubjectEventsBySemesterID(Long semesterID, AsyncCallback<CSSubjectEventDTO[]> callback);

	

	
	//zwraca lecture preferences dla lecturera w podanym semestrze
//	public void getLecturerPreferencesBySemesterGroupID(Long lecturerID, Long semesterID, AsyncCallback callback);
//	public void getCSLecturerPreferencesBySemesterGroupID(Long lecturerID, Long semesterID, AsyncCallback callback);
	
	public void getCSPreferencesBySemesterID(Long semesterID, AsyncCallback<CSPreferenceDTO[]> callback);
	
	
	//duplikuje semestr
	public void createSemesterBasingOnExistingOne(CSSemesterDTO newSemester, CSSemesterDTO existingS, AsyncCallback callback);
	
	
	//zwraca obiekty skojarzone z danym semestrem
	public void getGroupsBySemesterID(Long semesterID, AsyncCallback callback);
	public void getCSDeclarationsBySemesterID(Long semesterID, AsyncCallback callback);
	public void getSubgroupsBySemesterID(Long semesterID, AsyncCallback callback);
	public void getCSSemestersYearGroupsBySemesterID(Long semesterID, AsyncCallback callback);
	public void getCSCalendarDaysBySemesterID(Long semesterID, AsyncCallback callback); 
	
	
	
	
	public void saveCSSubjectEvent(CSSubjectEventDTO subjectEvent, AsyncCallback callback);
	public void saveCSSubjectEvents(CSSubjectEventDTO[] subjectEvent, AsyncCallback callback);
	public void removeCSSubjectEvent(CSSubjectEventDTO subjectEvent, AsyncCallback callback);

	public void saveCSDeclaration(CSDeclarationDTO declaration, AsyncCallback callback);
	public void removeCSDeclaration(CSDeclarationDTO declaration, AsyncCallback callback);

	
	
	public void saveCSLecturer(CSLecturerDTO lecturer, AsyncCallback callback);
	public void removeCSLecturer(CSLecturerDTO lecturer, AsyncCallback callback);
	
	public void saveCSSemester(CSSemesterDTO semester, AsyncCallback callback);
	public void removeCSSemester(CSSemesterDTO semester, AsyncCallback<Boolean> callback);

	public void saveCSSubgroup(CSSubgroupDTO subgroup, AsyncCallback callback);
	public void removeCSSubgroup(CSSubgroupDTO subgroup, AsyncCallback callback);

	public void saveCSGroup(CSGroupDTO group, AsyncCallback callback);
	public void removeCSGroup(CSGroupDTO group, AsyncCallback callback);
	
	public void saveCSAcademicTitle(CSAcademicTitleDTO academicTitle, AsyncCallback callback);
	public void removeCSAcademicTitle(CSAcademicTitleDTO academicTitle, AsyncCallback callback);

	public void saveCSCalendarDay(CSCalendarDayDTO calendarDay, AsyncCallback callback);
	public void removeCSCalendarDay(CSCalendarDayDTO calendarDay, AsyncCallback callback);

	public void saveCSSubjectName(CSSubjectNameDTO subjectName, AsyncCallback callback);
	public void removeCSSubjectName(CSSubjectNameDTO subjectName, AsyncCallback callback);

	public void saveCSSubject(CSSubjectDTO subject, AsyncCallback callback);
	public void removeCSSubject(CSSubjectDTO subject, AsyncCallback callback);

	public void saveCSSubjectType(CSSubjectTypeDTO subjectType, AsyncCallback callback);
	public void removeCSSubjectType(CSSubjectTypeDTO subjectType, AsyncCallback callback);
	
	public void saveCSSubgroupType(CSSubgroupTypeDTO subgroupType, AsyncCallback callback);
	public void removeCSSubgroupType(CSSubgroupTypeDTO subgroupType, AsyncCallback callback);

	public void saveCSBuilding(CSBuildingDTO building, AsyncCallback callback);
	public void removeCSBuilding(CSBuildingDTO building, AsyncCallback callback);
	
	public void saveCSRoomType(CSRoomTypeDTO roomType, AsyncCallback callback);
	public void removeCSRoomType(CSRoomTypeDTO roomType, AsyncCallback callback);
	
	public void saveCSRoom(CSRoomDTO room, AsyncCallback callback);
	public void removeCSRoom(CSRoomDTO room, AsyncCallback callback);
	
	public void saveCSYearGroupName(CSYearGroupNameDTO yearGroupName, AsyncCallback callback);
	public void removeCSYearGroupName(CSYearGroupNameDTO yearGroupName, AsyncCallback callback);	

	public void saveCSSemestersYearGroups(CSSemestersYearGroupsDTO semestersYearGroups, AsyncCallback callback);
	public void removeCSSemestersYearGroups(CSSemestersYearGroupsDTO semestersYearGroups, AsyncCallback callback);
	
	public void saveCSPreferenceType(CSPreferenceTypeDTO preferenceType, AsyncCallback callback);
	public void removeCSPreferenceType(CSPreferenceTypeDTO preferenceType, AsyncCallback callback);

	
	
	
	
	
	
	
	
	public void savePreference(CSPreferenceDTO csPreferenceDTO, AsyncCallback callback);
	public void removePreference(CSPreferenceDTO csPreferenceDTO, AsyncCallback callback);
	
	
	
	public void getSubjectEvents(AsyncCallback callback);
	public void getDeclarations(AsyncCallback callback);
	
	public void getSubgroups(AsyncCallback callback);
	public void getGroups(AsyncCallback callback);
	public void getSemestersYearGroups(AsyncCallback callback);
	public void getYearGroupNames(AsyncCallback callback);
	

	public void getCSSemesters(AsyncCallback callback);
	public void getSemesterTypes(AsyncCallback callback);
	public void getStudiesTypes(AsyncCallback callback);
	public void getSubgroupTypes(AsyncCallback callback);
	
	public void getSubjects(AsyncCallback callback);
	public void getSubjectNames(AsyncCallback callback);
	public void getSubjectTypes(AsyncCallback callback);
	
	public void getRooms(AsyncCallback callback);
	public void getLecturers(AsyncCallback callback);
	public void getRoomTypes(AsyncCallback callback);
	public void getBuildings(AsyncCallback callback);
	public void getAcademicTitle(AsyncCallback callback);
	public void getAcademicTitles(AsyncCallback callback);
	public void getPreferenceTypes(AsyncCallback callback);
//	public void getPreferences(AsyncCallback callback);
	
	
	public void signInAdministrator(String login, String password, AsyncCallback<Boolean> callback);
	
	
	public void getTestDTO(AsyncCallback callback);
}
